package config

import (
	"go.uber.org/zap"
	"gopkg.in/yaml.v3"
	"os"
)

// AgentConfig 定义服务器配置结构体
type AgentConfig struct {
	RpcServerAddr         string       `yaml:"rpc_server_addr"`           // rpc server 地址
	RpcCallTimeOutSeconds int          `yaml:"rpc_call_time_out_seconds"` // rpc 调用超时时间
	HttpAddr              string       `yaml:"http_addr"`                 // http 地址
	LogLevel              string       `yaml:"log_level"`                 // 日志级别
	LogFilePath           string       `yaml:"log_file_path"`             // 日志文件路径
	ErrLogPath            string       `yaml:"err_log_path"`              // 错误日志文件路径
	InfoCollectC          *InfoCollect `yaml:"info_collect"`              // 采集信息配置
	JobExecC              *JobExec     `yaml:"job_exec"`                  // 任务执行配置
	HostName              string       `yaml:"-"`                         // 主机名
	LocalIp               string       `yaml:"-"`                         // 本地 ip
	Logger                *zap.Logger  `yaml:"-"`                         // 日志
}

// InfoCollect 采集信息配置
type InfoCollect struct {
	Enable             bool `yaml:"enable"`               // 是否启用采集信息
	RunIntervalSeconds int  `yaml:"run_interval_seconds"` // 采集信息运行时间
}

// JobExec 任务执行配置
type JobExec struct {
	Enable             bool   `yaml:"enable"`               // 是否启用任务执行功能
	RunIntervalSeconds int    `yaml:"run_interval_seconds"` // 任务执行运行时间
	MetaDir            string `yaml:"meta_dir"`             // 任务元数据目录
	ExecTimeoutSeconds int    `yaml:"execTimeoutSeconds"`   // 任务执行超时时间
	PythonBinPath      string `yaml:"python_bin_path"`      // python 执行程序路径
	BashBinPath        string `yaml:"bash_bin_path"`        // bash 执行程序路径
}

// 加载配置文件并解析
func LoadAgent(filename string) (*AgentConfig, error) {
	cfg := &AgentConfig{}
	content, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	err = yaml.Unmarshal(content, cfg)
	if err != nil {
		return nil, err
	}
	return cfg, nil
}
